View Javadoc
1 /* 2 * $Header: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/strategy/HyphenatedNameMapper.java,v 1.2 2002/09/12 13:49:03 jstrachan Exp $ 3 * $Revision: 1.2 $ 4 * $Date: 2002/09/12 13:49:03 $ 5 * 6 * ==================================================================== 7 * 8 * The Apache Software License, Version 1.1 9 * 10 * Copyright (c) 1999-2002 The Apache Software Foundation. All rights 11 * reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in 22 * the documentation and/or other materials provided with the 23 * distribution. 24 * 25 * 3. The end-user documentation included with the redistribution, if 26 * any, must include the following acknowlegement: 27 * "This product includes software developed by the 28 * Apache Software Foundation (http://www.apache.org/)." 29 * Alternately, this acknowlegement may appear in the software itself, 30 * if and wherever such third-party acknowlegements normally appear. 31 * 32 * 4. The names "The Jakarta Project", "Commons", and "Apache Software 33 * Foundation" must not be used to endorse or promote products derived 34 * from this software without prior written permission. For written 35 * permission, please contact apache@apache.org. 36 * 37 * 5. Products derived from this software may not be called "Apache" 38 * nor may "Apache" appear in their names without prior written 39 * permission of the Apache Group. 40 * 41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52 * SUCH DAMAGE. 53 * ==================================================================== 54 * 55 * This software consists of voluntary contributions made by many 56 * individuals on behalf of the Apache Software Foundation. For more 57 * information on the Apache Software Foundation, please see 58 * <http://www.apache.org/>;. 59 * 60 * $Id: HyphenatedNameMapper.java,v 1.2 2002/09/12 13:49:03 jstrachan Exp $ 61 */ 62 package org.apache.commons.betwixt.strategy; 63 64 import java.beans.Introspector; 65 66 /*** 67 * A name mapper which converts types to a hypenated String. So 68 * a bean type of FooBar will be converted to the element name "foo-bar". 69 * The name mapper can be configured to convert to upper case and to 70 * use a different separator via the <code>separator</code> and 71 * <code>upperCase</code> properties, so that FooBar can be converted 72 * to FOO_BAR if needed, by calling the constructor 73 * <code>new HyphenatedNameMapper(true, "_")</code>. 74 * 75 * @author <a href="mailto:jason@zenplex.com">Jason van Zyl</a> 76 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 77 * @version $Revision: 1.2 $ 78 */ 79 public class HyphenatedNameMapper implements NameMapper { 80 81 /*** the separator used to seperate words, which defaults to '-' */ 82 private String separator = "-"; 83 84 /*** whether upper or lower case conversions should be performed */ 85 private boolean upperCase = false; 86 87 public HyphenatedNameMapper() { 88 } 89 90 public HyphenatedNameMapper(boolean upperCase) { 91 this.upperCase = upperCase; 92 } 93 94 public HyphenatedNameMapper(boolean upperCase, String separator) { 95 this.upperCase = upperCase; 96 this.separator = separator; 97 } 98 99 /*** 100 * @return the element name for the given bean type name 101 */ 102 public String mapTypeToElementName(String typeName) { 103 104 int length = typeName.length(); 105 if (length == 0) { 106 return ""; 107 } 108 109 StringBuffer sb = new StringBuffer(); 110 111 sb.append(convertChar(typeName.charAt(0))); 112 113 for (int i = 1; i < length; i++) { 114 if (Character.isUpperCase(typeName.charAt(i))) { 115 sb.append(separator); 116 sb.append(convertChar(typeName.charAt(i))); 117 } 118 else { 119 if ( upperCase ) { 120 sb.append(convertChar(typeName.charAt(i))); 121 } 122 else { 123 sb.append(typeName.charAt(i)); 124 } 125 } 126 } 127 128 return sb.toString(); 129 } 130 131 // Properties 132 //------------------------------------------------------------------------- 133 /*** 134 * @return the separator used to seperate words, which defaults to '-' 135 */ 136 public String getSeparator() { 137 return separator; 138 } 139 140 /*** 141 * Sets the separator used to seperate words, which defaults to '-' 142 */ 143 public void setSeparator(String separator) { 144 this.separator = separator; 145 } 146 147 /*** 148 * @return whether upper or lower case conversions should be performed, 149 * which defaults to false for lower case 150 */ 151 public boolean isUpperCase() { 152 return upperCase; 153 } 154 155 /*** 156 * Sets whether upper or lower case conversions should be performed, 157 * which defaults to false for lower case 158 */ 159 public void setUpperCase(boolean upperCase) { 160 this.upperCase = upperCase; 161 } 162 163 // Implementation methods 164 //------------------------------------------------------------------------- 165 166 /*** 167 * Performs type conversion on the given character based on whether 168 * upper or lower case conversions are being used 169 */ 170 protected char convertChar(char ch) { 171 if ( upperCase ) { 172 return Character.toUpperCase(ch); 173 } 174 else { 175 return Character.toLowerCase(ch); 176 } 177 } 178 }

This page was automatically generated by Maven